#include <istream>
using namespace std;
#include <queue>
#include <pthread.h>

namespace b_q
{
    template<class T>
    class block_queue
    {
    public:   
       block_queue() // 构造
       {
         pthread_mutex_init(&mtx_ , nullptr);
         pthread_cond_init(&full_ , nullptr);
         pthread_cond_init(&empty_ , nullptr);
       }
       ~block_queue() // 析构
       {
         pthread_mutex_destroy(&mtx_);
         pthread_cond_destroy(&full_);
         pthread_cond_destroy(&empty_);
       }
    public:
       void push()
       {
         // 生产数据
       }
       void pop()
       {
        // 取走数据
       }
       void LockQueue()
       {
        // 上锁保证原子性
       }
       void UnLockQueue()
       {
        // 解锁
       }
       void 
    private:
      queue<T> bq_; //阻塞队列
      int cap_; //队列大小
      pthread_mutex_t mtx_; //保护线程安全
      pthread_cond_t full_; //线程同步 
      pthread_cond_t empty_; //线程同步 
    };
}